//这段代码主要用于配置 MyBatis-Plus 的分页和事务管理功能，确保应用程序能够正确处理数据库操作和分页查询。
package com.mindskip.xzs.configuration.mybatisPlus;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

// 使用 @EnableTransactionManagement 注解启用 Spring 的声明式事务管理，允许使用 @Transactional 注解在服务层或 DAO 层管理事务，确保数据库操作的原子性和一致性。
@EnableTransactionManagement
// 使用 @Configuration 注解将该类标注为 Spring 配置类
@Configuration
// 使用 @MapperScan 注解指定要扫描的 Mapper 接口包路径，这样 MyBatis 就能找到并注册这些接口
@MapperScan("com.mindskip.xzs.repository")
public class MyBatisPlusConfig {

    //定义 MyBatis-Plus 拦截器 Bean：
    //@Bean 注解定义一个 Bean，该 Bean 用于配置 MyBatis-Plus 的拦截器。
    //mybatisPlusInterceptor 方法创建并返回一个 MybatisPlusInterceptor 实例，该实例是 MyBatis-Plus 的核心拦截器，用于插入各种功能插件。
    //PaginationInnerInterceptor 插件被添加到拦截器中，并指定数据库类型为 MySQL。这个插件用于处理分页查询，自动生成分页 SQL 并处理分页逻辑。
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        // 创建一个 MybatisPlusInterceptor 实例
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 添加一个分页拦截器，并指定数据库类型为 MySQL
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        // 返回配置好的拦截器实例
        return interceptor;
    }
}
